package com.gitee.ec.kernel;

import com.sun.jna.Library;
import com.sun.jna.WString;

import java.nio.CharBuffer;
import java.nio.IntBuffer;

/**
 * @author hongda.li
 */
@SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
public interface EverythingLibrary extends Library {
    /**
     * 设置最大检索数量
     *
     * @param limit 最大检索数量
     */
    void Everything_SetMax(int limit);

    /**
     * 设置检索偏移量
     *
     * @param offset 检索偏移量
     */
    void Everything_SetOffset(int offset);

    /**
     * 设置是否启用正则
     *
     * @param enabled 是否启用
     */
    void Everything_SetRegex(boolean enabled);

    /**
     * 设置检索项内容
     *
     * @param flag 检索项内容
     */
    void Everything_SetRequestFlags(int flag);

    /**
     * 设置检索表达式
     *
     * @param expression 检索表达式
     */
    void Everything_SetSearchW(WString expression);

    /**
     * 设置是否启用路径匹配
     *
     * @param enabled 是否启用路径匹配
     */
    void Everything_SetMatchPath(boolean enabled);

    /**
     * 设置是否启用大小写匹配
     *
     * @param enabled 是否启用大小写匹配
     */
    void Everything_SetMatchCase(boolean enabled);

    /**
     * 设置是否启用全量检索词匹配
     *
     * @param enabled 是否启用全量检索词匹配
     */
    void Everything_SetMatchWholeWord(boolean enabled);

    /**
     * 获取上一次操作的错误码
     *
     * @return 错误码
     */
    int Everything_GetLastError();

    /**
     * 函数应该等待结果还是立即返回。
     * 将此项设置为 false 可发布 IPC 查询并立即返回
     * 将此项设置为 true 以发送 IPC 查询并等待结果
     *
     * @param wait 是否等待结果
     */
    void Everything_QueryW(boolean wait);

    /**
     * 设置文件排序
     *
     * @param sort 文件排序值
     */
    void Everything_SetSort(int sort);

    /**
     * 获取检索总数量
     *
     * @return 检索总数量
     */
    int Everything_GetNumResults();

    /**
     * 获取文件名称
     *
     * @param index 文件索引
     * @return 文件名称
     */
    WString Everything_GetResultFileNameW(int index);

    /**
     * 获取文件所在目录的路径
     *
     * @param index 文件索引
     * @return 目录路径
     */
    WString Everything_GetResultPathW(int index);

    /**
     * 获取文件的全路径
     *
     * @param index      文件索引
     * @param buffer     文件路径缓冲
     * @param bufferSize 缓冲大小
     */
    void Everything_GetResultFullPathNameW(int index, CharBuffer buffer, int bufferSize);

    /**
     * 获取文件的后缀名
     *
     * @param index 文件索引
     * @return 后缀名
     */
    WString Everything_GetResultExtensionW(int index);

    /**
     * 获取文件大小
     *
     * @param index  文件索引
     * @param buffer 文件大小
     */
    void Everything_GetResultSize(int index, IntBuffer buffer);

    /**
     * 获取文件修改时间
     *
     * @param index    文件索引
     * @param fileTime 文件时间结构体
     */
    void Everything_GetResultDateModified(int index, FileTime fileTime);

    /**
     * 获取待检索项的总数量
     *
     * @return 检索数量
     */
    int Everything_GetTotResults();

    /**
     * 重置查询条件
     */
    void Everything_Reset();

    /**
     * 获取主版本号
     *
     * @return 主版本号
     */
    int Everything_GetMajorVersion();

    /**
     * 获取次要版本号
     *
     * @return 次要版本号
     */
    int Everything_GetMinorVersion();

    /**
     * 获取修订版本号
     *
     * @return 修订版本号
     */
    int Everything_GetRevision();

    /**
     * 判断是否为文件
     *
     * @param index 索引
     * @return 是否为文件
     */
    boolean Everything_IsFileResult(int index);

    /**
     * 判断是否为文件夹
     *
     * @param index 索引
     * @return 是否为文件夹
     */
    boolean Everything_IsFolderResult(int index);
}
